#ifndef WARN_TABLE_H
#define WARN_TABLE_H
#include <QMap>
#include <QList>
#include <QWidget>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QDateTime>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>

namespace Ui
{
    class warn_table;
}

// 警告信息结构体
struct WarningInfo
{
    int id = -1;       // 数据库ID
    QString blockName; // 柜名
    QString position;  // 安装位置
    QString value;     // 值
    QString type;      // 类型
    QString time;      // 产生时间
};

class warn_table : public QWidget
{
    Q_OBJECT

public:
    explicit warn_table(QWidget *parent = nullptr);
    ~warn_table();
    bool processJsonCommand(const QString &jsonStr, QString *err); // 解析json命令并处理,返回err

private:
    void updateWarningTable(const QList<WarningInfo> &currentWarnings);
    void initDatabase();                                                           // 初始化数据库
    void insertWarningToDB(WarningInfo &warning);                                  // 插入新报警到数据库
    void updateWarningEndTime(const WarningInfo &warning);                         // 更新报警消除时间
    double getThresholdForParameter(const QString &type, const QString &position); // 根据类型和位置获取阈值

    Ui::warn_table *ui;

    // 各种阈值
    double m_tempLimit_cd = 75.0; // 触头温度阈值
    double m_tempLimit_hj = 75.0; // 环境温度阈值
    double m_humLimit_hj = 85.0;  // 环境湿度阈值
    double m_dbLimit_cs = 35.0;   // 超声波阈值
    double m_dbLimit_zt = 45.0;   // 暂态地电压阈值

    // 存储警告信息列表
    QList<WarningInfo> m_warningList;

    // 数据库相关
    QSqlDatabase m_db;

signals:
    void signalToForward(const QString &msg);
};

#endif // WARN_TABLE_H